/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.tecnick.htmlutils.htmlentities.HTMLEntities;
import com.db.Conector;
import com.db.SqlManager;
import com.exception.DataException;
import com.javabeans.*;
import com.model.AccesoManager;
import com.model.CarreraManager;
import com.model.EstudianteManager;
import com.model.EtiquetaManager;
import com.model.ManagerFactory;
import com.model.RolUsuarioManager;
import com.model.UsuarioManager;
import com.util.UtilDate;
import de.ceyco.text.HtmlEntities2Latin1Charset;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Administrador
 */
public class Foros extends HttpServlet {

    HttpServletRequest request;
    HttpServletResponse response;
    HttpSession session;
    String msg = "";
    
    private String PAGE = "";
    private static final String ERROR_PAGE = "WEB-INF/error.jsp";
    private static final String ERROR_AJAX = "WEB-INF/errorAjax.jsp";
    boolean isForward = true; // inicializamos con forward....
    Usuario s_Usuario = null;
    boolean isRedirect = true; // inicializamos con sendRedirect....
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        this.request = request;
        this.response = response;
        session = request.getSession();
        int accion = Integer.parseInt(request.getParameter("accion"));
       
            try{
                switch(accion){
                    case 1  : indexForoSelect(); break;                                    // accion = 1  = index del foro con select
                    case 2  : indexForo(accion); break;                                    // accion = 2  = inicio del foro
                    case 3  : indexForo(accion); break;                                    // accion = 3  = inicio del foro con idCorrespondiente
                    case 4  : mostrarDetalleForo(); break;                                 // accion = 4  = mostramos el detalle del foro con su idForo
                    case 5  : insertMensaje(); break;                                      // accion = 5  = insertamos el mensaje
                    case 6  : insertPreguntaMain(); break;                                 // accion = 6  = insertamos la pregunta principal
                    case 7  : updateVoto(); break;                                         // accion = 7  = actualizamos el voto dependiendo si es add, resto
                    case 8  : indexForo(accion); break;                                    // accion = 8  = retornamos con la palabra buscada
                    case 9  : indexForo(accion); break;                                    // accion = 9  = retornamos todos lo q no tienen respuesta
                    case 10 : indexForo(accion); break;                                    // accion = 10 = listamos las etiquetas
                    case 11 : indexForo(accion); break;                                    // accion = 11 = inicio para el login
                    case 12 : iniciaSesionDoc(request,response); break;                    // accion = 12 = validar docente
                    case 13 : cerrarSessionDoc(request,response); break;                   // accion = 13 = cierra session docente
                    case 14 : iniciaSesionEst(request,response); break;                    // accion = 14 = valida estudiante
                    case 15 : cerrarSessionEst(request,response); break;                   // accion = 15 = cierra sesion estudiante
                    case 16 : indexAdmin();                       break;                   // accion = 16 = inicio de administrativo
                    case 17 : iniciaSesionAdministr(request,response, accion); break;              // accion = 17 = para iniciar sesion administrativo
                    case 18 : cerrarSessionAdministr(request,response, accion); break;             // accion = 18 = cierra session admin
                    case 19 : listarAdminAjax(); break;                                    // accion = 19 = listamos el foro padre
                    case 20 : updateForoFatherAdmin(accion); break;                        // accion = 20 = actualizamos el foro padre
                    case 21 : listarDetalleAdminAjax(); break;                             // accion = 21 = listamos el detalle de un foro
                    case 22 : updateForoFatherAdmin(accion); break;                        // accion = 22 = actualizamos el detalle de un foro
                    case 23 : iniciaSesionAdministr(request,response, accion); break;              // accion = 17 = para iniciar sesion administrativo
                    case 24 : cerrarSessionAdministr(request,response, accion); break;             // accion = 18 = cierra session admin
                    //case 23 : indexTemaAdmin(accion); break;                               // accion = 23 = inicio de nuevo tema admin
                    default : System.out.println(" accion = "+accion+" no existe en Foros.java"); throw new DataException("accion = "+accion+" no existe en Foros.java");
                }
            }catch(DataException e){
                throw new ServletException(e);
            }
        //}
        if(isRedirect){
            response.sendRedirect(PAGE);
        }else{
            RequestDispatcher dispatch = request.getRequestDispatcher(PAGE);
            dispatch.forward(request,response);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
    
    private void indexForoSelect() throws DataException {// accion <-- 1 inicio con select
        Connection c = null;
        try{
            c = Conector.getConexion();
            CarreraManager cManager = ManagerFactory.getCarreraManagerInstance(c);
            request.setAttribute( "carreras", cManager.getCarrerasAll() );
            isRedirect = false;// es un dispatch.forward
            PAGE = "web/foro/index.jsp";
        }catch(DataException e){
            System.out.println(UtilDate.getDateTime()+" Foros -> indexForoSelect() e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> indexForoSelect() DataException "+e.getMessage());
            PAGE = ERROR_PAGE;
        }catch(Exception ex){
            System.out.println(UtilDate.getDateTime()+" Foros -> indexForoSelect() ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> indexForoSelect() Exception ex: "+ex.getMessage());
            PAGE = ERROR_PAGE;
        }finally{
            SqlManager.closeConexion(c);
        }
    }
    private void indexForo(int accion) throws DataException{// accion <-- 2; accion <-- 3; accion <--8; accion <-- 9;accion <-- 10; accion <-- 11 inicio de login
        Connection c = null;
        
        int idCarrera = Integer.parseInt( request.getParameter("carrera") );
        int idEtiqueta = 0;
        String nombre = "";
        String palabra = "";
        String op = "";
        if(accion == 3){
            idEtiqueta = Integer.parseInt(request.getParameter("idCorresponde"));
            nombre = request.getParameter("nombCorres");// por ahora no lo uso
            op = request.getParameter("op");
        }
        if( accion==8 ){
            palabra = request.getParameter("palabra");
            op = request.getParameter("op");
        }
        
        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
            switch(accion){
                case 2:
                    request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
                    request.setAttribute("op", 2);
                    request.setAttribute("", false);
                    break;
                case 3:
                    request.setAttribute( "foros", fManager.getForos(idEtiqueta,idCarrera) );// List<Foro>
                    request.setAttribute("op", op);
                    break;
                case 8:
                    request.setAttribute("foros", fManager.getForos(idCarrera, palabra));
                    request.setAttribute("op", op);
                    break;
                case 9:
                    request.setAttribute("foros", fManager.getForos(idCarrera, true));
                    request.setAttribute("op", 9);
                    break;
                case 10:
                    request.setAttribute("op", 10);
                    break;
                case 11:
                    
                    break;
            }
            request.setAttribute("idCarrera",idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
            
            if(accion == 10)
                request.setAttribute( "correspondeAll", cManager.getEtiquetaAllCant(idCarrera) );//List<ETIQUETA>
            else
                request.setAttribute( "correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
            
            if(accion == 10)
                PAGE = "web/foro/etiqueta/listarEtiqueta.jsp";
            else if(accion == 11)
                PAGE = "web/foro/login/login.jsp";
            else
                PAGE = "web/foro/listarForo.jsp";
        }catch(DataException e){
            System.out.println(UtilDate.getDateTime()+" Error! Foros -> indexForo(int accion) e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> indexForo(int accion) DataException "+e.getMessage());
            PAGE = ERROR_PAGE;
        }catch(Exception ex){
            System.out.println(UtilDate.getDateTime()+" Error! Foros -> indexForo(int accion) ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> indexForo(int accion) Exception ex: "+ex.getMessage());
            PAGE = ERROR_PAGE;
        }finally{
            SqlManager.closeConexion(c);
        }
    }

    private void mostrarDetalleForo() throws DataException{// accion <-- 4;
        Connection c = null;
        int idForo = Integer.parseInt(request.getParameter("idForo"));
        int cantLeido = 0;//Integer.parseInt(request.getParameter("cantLeido"));// la cantidad hasta ese momento
        int idEtiqueta = Integer.parseInt(request.getParameter("idCorresponde"));
        int idCarrera = Integer.parseInt(request.getParameter("idCarrera"));
        String op = request.getParameter("op");
        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
            cantLeido = fManager.getCantLeido(idForo);
            fManager.updateCantLeido( idForo, (cantLeido+1),idCarrera );
            request.setAttribute("opiniones", fManager.getOpiniones(idForo, idCarrera));// List<Foro>
            request.setAttribute("correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
            request.setAttribute("ids", idCarrera+"_"+op+"_"+idEtiqueta); // idCarrera+"_"+op+"_"+idEtiqueta
            
            PAGE = "web/foro/mostrarDetalle.jsp";
        }catch(DataException e){
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> mostrarDetalleForo() e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+"Error! Foros -> mostrarDetalleForo() DataException "+e.getMessage());
            PAGE = ERROR_PAGE;
        }catch(Exception ex){
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> mostrarDetalleForo() ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+"Error! Foros -> mostrarDetalleForo() Exception ex: "+ex.getMessage());
            PAGE = ERROR_PAGE;
        }finally{
            SqlManager.closeConexion(c);
        }
    }

    private void insertMensaje() throws DataException{// accion <-- 5
        Connection c = null;
        int idForo = 0;
        Foro f = new Foro();
        String mensaje = request.getParameter("mensaje");
        String aux[] = (request.getParameter("auxVarios")).split("_");//f.forIdForo_f.idCarrera_f.titulo_c.idEtiqueta
        String autor = request.getParameter("autor");
        int respuesta = 0;
        int idEstudiante = 0;
        int idUsuario = 0;
        
        if(session.getAttribute("s_docente") != null)
            idUsuario = ( (Usuario)session.getAttribute("s_docente") ).getIdUsuario();
        if(session.getAttribute("s_estudiante") != null)
            idEstudiante = ( (Estudiante)session.getAttribute("s_estudiante") ).getIdEstudiante();
        
        try{
            c = Conector.getConexion();
            c.setAutoCommit(false);
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            
            idForo = fManager.getIdForo();
            f.setIdForo(idForo);
            f.setIdEstudiante(idEstudiante);
            f.setIdUsuario(idUsuario);
            f.setFor_idForo( Integer.parseInt(aux[0]) );
            f.setIdCarrera(Integer.parseInt(aux[1]));
            f.setAutor( HTMLEntities.htmlentities( autor.replace("'", "\"")) );
            f.setTitulo( HTMLEntities.htmlentities(aux[2]) );
            f.setIdEtiqueta(Integer.parseInt(aux[3]));
            f.setMensaje( HTMLEntities.htmlentities(mensaje.replace("'", "\"")));
            f.setFecha(UtilDate.getDateTime());
            f.setRespuesta(0);
            f.setVoto(0);
            f.setLeido(0);
            f.setUltRespuesta(UtilDate.getDateTime());
            f.setActivo(true);
            fManager.saveForo(f);
            
            respuesta = (fManager.getCantRespuesta(f.getFor_idForo()) + 1 );
            fManager.updateRespuestas(f.getFor_idForo(), respuesta);//forIdForo, respuestas
            
            request.setAttribute("opinion", fManager.getOpinion( f.getFor_idForo(), f.getIdCarrera(), f.getIdForo()) );// Foro
            c.commit();
            PAGE = "web/foro/insertMsgAjax.jsp";
        }catch(DataException e){
            SqlManager.rollBack(c);
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> insertMensaje() e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+"Error! Foros -> insertMensaje() DataException "+e.getMessage());
            PAGE = ERROR_AJAX;
        }catch(Exception ex){
            SqlManager.rollBack(c);
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> insertMensaje() ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+"Error! Foros -> insertMensaje() Exception ex: "+ex.getMessage());
            PAGE = ERROR_AJAX;
        }finally{
            SqlManager.setAutoCommit(c, true);
            SqlManager.closeConexion(c);
        }
        
    }

    private void insertPreguntaMain() throws DataException, IOException{// accion <-- 6
        PAGE = "";
        PrintWriter out = response.getWriter();
        
        Connection c = null;
        int idForo = 0;
        String autor = request.getParameter("autor");
        int idEtiqueta = Integer.parseInt( request.getParameter("corresponde") );
        String titulo = request.getParameter("titulo");
        String mensaje = request.getParameter("mensaje");
        int idCarrera = Integer.parseInt(request.getParameter("idCarrera"));    
        int idEstudiante = 0;
        int idUsuario = 0;
        if(session.getAttribute("s_docente") != null)
            idUsuario = ( (Usuario)session.getAttribute("s_docente") ).getIdUsuario();
        if(session.getAttribute("s_estudiante") != null)
            idEstudiante = ( (Estudiante)session.getAttribute("s_estudiante") ).getIdEstudiante();
        
        try{
            c = Conector.getConexion();
            c.setAutoCommit(false);
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            idForo = fManager.getIdForo();
            
            Foro f = new Foro();
            f.setIdForo(idForo);
            f.setIdEstudiante(idEstudiante);
            f.setIdUsuario(idUsuario);
            f.setFor_idForo(idForo);
            f.setIdCarrera(idCarrera);
            f.setAutor(HTMLEntities.htmlentities(autor.replace("'", "\"")) );
            f.setTitulo(HTMLEntities.htmlentities( titulo.replace("'", "\"")) );
            f.setIdEtiqueta(idEtiqueta);
            f.setMensaje(HTMLEntities.htmlentities(mensaje.replace("'", "\"")));
            f.setFecha(UtilDate.getDateTime());
            f.setRespuesta(0);
            f.setVoto(0);
            f.setLeido(0);
            f.setUltRespuesta(UtilDate.getDateTime());
            f.setActivo(true);
            fManager.saveForo(f);
            
            out.println( "1" );
            c.commit();
        }catch(DataException e){
            out.println( "0" );
            SqlManager.rollBack(c);
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> insertPreguntaMain() e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+"Error! Foros -> insertPreguntaMain() DataException "+e.getMessage());
            PAGE = ERROR_AJAX;
        }catch(Exception ex){
            out.println( "0" );
            SqlManager.rollBack(c);
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> insertPreguntaMain() ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+"Error! Foros -> insertPreguntaMain() Exception ex: "+ex.getMessage());
            PAGE = ERROR_AJAX;
        }finally{
            SqlManager.setAutoCommit(c, true);
            SqlManager.closeConexion(c);
            out.close();
        }
    }

    private void updateVoto() throws DataException, IOException{// accion <-- 7
        PAGE = "";
        PrintWriter out = response.getWriter();
        boolean estado = Boolean.parseBoolean(request.getParameter("estado"));
        String auxVarios[] = request.getParameter("auxVarios").split("_");// [For_idForo]_[IdCarrera]_[Titulo]_[idEtiqueta]
        int voto = 0;
        int forIdForo = Integer.parseInt(auxVarios[0]);
        int idCarrera = Integer.parseInt(auxVarios[1]);
        Connection c = null;
        
        try{
            c = Conector.getConexion();
            c.setAutoCommit(false);
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);// envio idpadreforo y eso busco en idforo
            voto = fManager.getCantVoto(forIdForo);
            if(estado){
                voto +=1;
            }else{
                if(voto <= 0)
                   voto = 0;
                else
                    voto -=1;
            }
            if(voto != 0)
                fManager.updateVoto(voto, forIdForo, idCarrera);
            
            
            out.println( voto+"" );
            c.commit();
        }catch(DataException e){
            out.println( "0" );
            SqlManager.rollBack(c);
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> updateVoto() e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> updateVoto() DataException "+e.getMessage());
            PAGE = ERROR_AJAX;
        }catch(Exception ex){
            out.println( "0" );
            SqlManager.rollBack(c);
            System.out.println(UtilDate.getDateTime()+"Error! Foros -> updateVoto() ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> updateVoto() Exception ex: "+ex.getMessage());
            PAGE = ERROR_AJAX;
        }finally{
            SqlManager.setAutoCommit(c, true);
            SqlManager.closeConexion(c);
            out.close();
        }
    }
    private void iniciaSesionDoc(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, DataException{
        // accion <-- 12
        Connection c = null;
        String login = request.getParameter("login").trim();
        String password = request.getParameter("ppsw").trim();
        int idCarrera = Integer.parseInt( request.getParameter("idCarrera") );
        try{
            c = Conector.getConexion();
            UsuarioManager docenteManager = ManagerFactory.getUsuarioManagerInstance(c);
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
            
            Usuario uDocente = docenteManager.validarDocente(login, password);
            
            // datos necesarios para el lado del cliente
            request.setAttribute( "idCarrera", idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
            request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
            request.setAttribute( "correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
            isRedirect = false;
            if(uDocente.getIdUsuario() != 0){
                request.setAttribute("op", 2);
                session = request.getSession(true);
                session.setAttribute("s_docente", uDocente);
                PAGE = "web/foro/listarForo.jsp";
            }else{
                request.setAttribute("msg", "Login o password incorrecto! vuelva a intentarlo!");
                PAGE = "web/foro/login/login.jsp";
            }
        }catch(DataException e){
            System.out.println("Error al iniciar session docente "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionDoc() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error al iniciar session docente "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionDoc() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c); 
        }
    }
    private void cerrarSessionDoc(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, DataException{// accion <-- 13
        Connection c = null;
        int idCarrera = Integer.parseInt(request.getParameter("idCarrera"));
        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
            request.setAttribute( "idCarrera", idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
            request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
            request.setAttribute( "correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
            request.setAttribute("op", 2);
            
            PAGE = "web/foro/listarForo.jsp";
            session = request.getSession(true);
            if( session.getAttribute("s_docente") != null ){
                session.invalidate(); // finalmente eliminamos la session actual
            }
        }catch(DataException e){
            System.out.println("Error al iniciar session docente "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionDoc() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error al iniciar session docente "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionDoc() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }
    private void iniciaSesionEst(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, DataException{
        // accion <-- 1
        Connection c = null;
        int login = Integer.parseInt(request.getParameter("login").trim());
        String password = request.getParameter("ppsw").trim();
        
        int idCarrera = Integer.parseInt( request.getParameter("idCarrera") );
        
        
        try{
            c = Conector.getConexion();
            EstudianteManager estManager = ManagerFactory.getEstudianteManagerInstance(c);
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
            
            Estudiante e = estManager.validarEstudiante(login, password);
            
            // datos necesarios para el lado del cliente
            request.setAttribute( "idCarrera", idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
            request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
            request.setAttribute( "correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
            isRedirect = false;
            if(e.getIdEstudiante() != 0){
                request.setAttribute("op", 2);
                session = request.getSession(true);
                session.setAttribute("s_estudiante", e);
                PAGE = "web/foro/listarForo.jsp";
            }else{
                request.setAttribute("msg", "Login o password incorrecto! vuelva a intentarlo!");
                PAGE = "web/foro/login/login.jsp";
            }
        }catch(DataException e){
            System.out.println("Error al iniciar session estudiante "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionEst() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error al iniciar session estudiante "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionEst() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }
    private void cerrarSessionEst(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, DataException{
        // accion <-- 15
        Connection c = null;
        int idCarrera = Integer.parseInt(request.getParameter("idCarrera"));
        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
            request.setAttribute( "idCarrera", idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
            request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
            request.setAttribute( "correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
            request.setAttribute("op", 2);
            
            PAGE = "web/foro/listarForo.jsp";
            session = request.getSession(true);
            if(session.getAttribute("s_estudiante") != null){
                session.invalidate(); // finalmente eliminamos la session actual
            }
        }catch(DataException e){
            System.out.println("Error al iniciar session docente "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionDoc() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error al iniciar session docente "+UtilDate.getDateTime()+"Error! Foros -> iniciaSesionDoc() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }

    private void indexAdmin() throws DataException {// accion <-- 16        
        Connection c = null;
        try{
            c = Conector.getConexion();
            CarreraManager cManager = ManagerFactory.getCarreraManagerInstance(c);
            isRedirect = false;// es un dispatch.forward
            
            if(session.getAttribute("s_accesos") != null){
                request.setAttribute( "carreras", cManager.getCarrerasAll() );
                PAGE = "web/foro/admin/formAdmin.jsp";
            }else
                PAGE = "web/foro/admin/index.jsp";
        }catch(DataException e){
            System.out.println(UtilDate.getDateTime()+" Foros -> indexAdmin() e: "+e.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> indexAdmin() DataException "+e.getMessage());
            PAGE = ERROR_PAGE;
        }catch(Exception ex){
            System.out.println(UtilDate.getDateTime()+" Foros -> indexAdmin() ex: "+ex.getMessage());
            request.setAttribute("msgError", UtilDate.getDateTime()+" Foros -> indexAdmin() Exception ex: "+ex.getMessage());
            PAGE = ERROR_PAGE;
        }finally{
            SqlManager.closeConexion(c);
        }
    }
    private void iniciaSesionAdministr(HttpServletRequest request, HttpServletResponse response, int accion) throws ServletException, IOException, DataException{
        // accion <-- 17
        // accion <-- 23;24
        Connection c = null;
        String login = request.getParameter("login").trim();
        String password = request.getParameter("ppsw").trim();
        int idCarrera = 0;
        if(accion == 23){
            idCarrera = Integer.parseInt( request.getParameter("idCarrera") );
        }
        try{
            c = Conector.getConexion();
            RolUsuarioManager r_umanager = ManagerFactory.getRolUsuarioManagerInstance(c);
            AccesoManager amanager = ManagerFactory.getAccesoManagerInstance(c);
            CarreraManager cManager = ManagerFactory.getCarreraManagerInstance(c);
            
            
            RolUsuario r_u = r_umanager.validarUsuario(login, password);
            if(r_u.getIdUsuario() != 0){
                session = request.getSession(true);
                session.setAttribute("s_accesos", amanager.getAccesos(r_u.getIdUsuario(), r_u.getIdRol()));
                session.setAttribute("s_Usuario", r_u.getUsuario());
                session.setAttribute("s_Rol", r_u.getRol());
                if(accion == 17)
                    request.setAttribute( "carreras", cManager.getCarrerasAll() );
                else{// accion <-- 23
                    ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
                    EtiquetaManager eManager = ManagerFactory.getEtiquetaManagerInstance(c);
                    request.setAttribute( "idCarrera", idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
                    request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
                    request.setAttribute( "correspondeAll", eManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
                    request.setAttribute("op", 2);
                }
                    
                if( accion == 17)
                    PAGE = "web/foro/admin/formAdmin.jsp";
                else
                    PAGE = "web/foro/listarForo.jsp";
                isRedirect = false;
            }else{
                request.setAttribute("msg", "Login o password incorrecto! vuelva a intentarlo!");
                if(accion == 17)
                    PAGE = "web/foro/admin/index.jsp";
                else
                    PAGE = "web/foro/login/login.jsp";
            }
        }catch(DataException e){
            System.out.println("Error! al iniciar session administrativo "+UtilDate.getDateTime()+" Foros -> iniciaSesionAdministr() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error! al iniciar session administrativo "+UtilDate.getDateTime()+" Foros -> iniciaSesionAdministr() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }
    private void cerrarSessionAdministr(HttpServletRequest request, HttpServletResponse response, int accion) throws ServletException, IOException, DataException{        
        
        Connection c = null;
        int idCarrera = 0;
        if(accion ==24)
            idCarrera = Integer.parseInt(request.getParameter("idCarrera"));
        try{
            
            if(accion == 18){
                this.indexForoSelect();
                session = request.getSession(true);
                if(session.getAttribute("s_accesos") != null){
                    session.invalidate(); // finalmente eliminamos la session actual
                }
            }else{//accion <-- 24
                System.out.println(idCarrera+"<<<<----");
                c = Conector.getConexion();
                ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
                EtiquetaManager cManager = ManagerFactory.getEtiquetaManagerInstance(c);
                request.setAttribute( "idCarrera", idCarrera);// solo para maquetar puede q no existan temas en ese caso ago uso de esto para redireccionar
                request.setAttribute( "foros", fManager.getForos(idCarrera) );// List<Foro> listamos el foro
                System.out.println(fManager.getForos(idCarrera).size() +"<<<<----");
                request.setAttribute( "correspondeAll", cManager.getEtiquetaAll(idCarrera) );//List<ETIQUETA>
                request.setAttribute("op", 2);
                PAGE = "web/foro/listarForo.jsp";
                if(session.getAttribute("s_accesos") != null){
                    session.invalidate(); // finalmente eliminamos la session actual
                }
            }
            
            
        }catch(DataException e){
            System.out.println("Error al iniciar session admin "+UtilDate.getDateTime()+"Error! Foros -> cerrarSessionAdministr() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error al iniciar session admin "+UtilDate.getDateTime()+"Error! Foros -> cerrarSessionAdministr() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
        
    }
   
    private void listarAdminAjax()throws DataException{// accion <-- 19        
        String aux = "";
        int idCarrera = Integer.parseInt( request.getParameter("carrera") );
        aux = request.getParameter("fechaIni");
        String fechaIni = aux.substring(6)+"-"+aux.substring(3, 5)+"-"+aux.substring(0, 2);
        aux = request.getParameter("fechaFin");
        String fechaFin = aux.substring(6)+"-"+aux.substring(3, 5)+"-"+aux.substring(0, 2);
        Connection c = null;

        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            
            request.setAttribute( "fechasOtros", fechaIni+"_"+fechaFin+"_"+"1"+"_"+idCarrera );
            request.setAttribute( "foros", fManager.getForos(idCarrera, fechaIni, fechaFin) );// List<Foro> listamos el foro
            PAGE = "web/foro/admin/listarAjax.jsp";
        }catch(DataException e){
            System.out.println("Error! "+UtilDate.getDateTime()+" Foros -> listarAdminAjax() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error! "+UtilDate.getDateTime()+" Foros -> listarAdminAjax() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }

    private void updateForoFatherAdmin(int accion) throws DataException{// accion <-- 20 ; accion <-- 22
        Connection c = null;        
        int idForo = Integer.parseInt( request.getParameter("idForo") );
        int idCarrera = Integer.parseInt(request.getParameter("idCarrera"));
        String titulo = request.getParameter("titulo");// este para 20 es titulo; 22 es autor
        String fechaIni = request.getParameter("fechaIni");
        String fechaFin = request.getParameter("fechaFin");
        int forIdForo = 0;
        if(accion == 22)
            forIdForo = Integer.parseInt(request.getParameter("forIdForo"));
        //System.out.println(idForo+" "+idCarrera+" "+titulo+" "+fechaIni+" "+fechaFin);// el 15 he modificado
        
        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            fManager.updateActivo(idCarrera, idForo);
            
            request.setAttribute( "fechasOtros", fechaIni+"_"+fechaFin+"_se di&oacute; de baja "+(accion==20?"correctamente a :":" la opinion de ")+" "+titulo );
            
            
            if(accion == 20){
                request.setAttribute( "foros", fManager.getForos(idCarrera, fechaIni, fechaFin) );// List<Foro> listamos el foro
                PAGE = "web/foro/admin/listarAjax.jsp";
            }else{
                request.setAttribute("opiniones", fManager.getOpiniones(forIdForo, idCarrera));// List<Foro>
                PAGE = "web/foro/admin/listarDetalleAjax.jsp";
            }
        }catch(DataException e){
            System.out.println("Error! "+UtilDate.getDateTime()+" Foros -> updateForoFatherAdmin() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error! "+UtilDate.getDateTime()+" Foros -> updateForoFatherAdmin() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }

    private void listarDetalleAdminAjax() throws DataException{// accion <-- 21
        int idForo = Integer.parseInt(request.getParameter("idForo"));
        int idCarrera = Integer.parseInt(request.getParameter("idCarrera"));
        
        String aux;
        aux = request.getParameter("fechaIni");
        String fechaIni = aux.substring(6)+"-"+aux.substring(3, 5)+"-"+aux.substring(0, 2);
        aux = request.getParameter("fechaFin");
        String fechaFin = aux.substring(6)+"-"+aux.substring(3, 5)+"-"+aux.substring(0, 2);
        
        Connection c = null;
        
        try{
            c = Conector.getConexion();
            ForoManager fManager = ManagerFactory.getForoManagerInstance(c);
            
            request.setAttribute( "fechasOtros", fechaIni+"_"+fechaFin+"_"+"1" );
            request.setAttribute("opiniones", fManager.getOpiniones(idForo, idCarrera));// List<Foro>
            
            PAGE = "web/foro/admin/listarDetalleAjax.jsp";
        }catch(DataException e){
            System.out.println("Error! "+UtilDate.getDateTime()+" Foros -> listarDetalleAdminAjax() "+e.getMessage());
        }catch(Exception ex){
            System.out.println("Error! "+UtilDate.getDateTime()+" Foros -> listarDetalleAdminAjax() "+ex.getMessage());
        }finally{
            SqlManager.closeConexion(c);
        }
    }   
}
